/**
 * PerlaController - part of PerlaGis Architecture
 *
 * Copyright (C) 2010 Ricardo Gonzalez (gomnaz@gmail.com)
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see http://www.gnu.org/licenses/
 */
package org.perla.managers;

import java.util.List;
import javax.persistence.EntityManager;
import org.notify.entities.Relation;
import org.notify.exceptions.NoRelationException;

/**
 * Classe statica che gestisce le relazioni.
 * Implementa metodi per creare nuove relazioni, recuperare le relazioni
 * presenti e le informazioni a riguardo.
 *
 * @author Ricardo Gonzalez
 * @author Eva Gjeci
 */
public class Notify {

    /**
     * Crea una nuova relazione con chiavi i valori passati come parametri.
     *
     * @param idNodo la chiave del nodo
     * @param idGis la chiave del sensore
     * @return l'oggetto Relation
     */
    public static Relation newRelation(String idNodo, int idGis) {
        Relation r = new Relation();
        r.setIdNodoPerla(idNodo);
        r.setIdSensoreGis(idGis);
        return r;
    }

    /**
     * Restituisce la chiave del nodo per la relazione del sensore Gis
     * corrispondente alla chiave passata come parametro.
     *
     * @param idGis la chiave del sensore Gis
     * @param em l'entity manager
     * @return la chiave del nodo
     */
    public static String getIdNodo(int idGis, EntityManager em) {
        Relation r = em.find(Relation.class, idGis);
        return r.getIdNodoPerla();
    }

//    public static int getIdGis(String idNodo, EntityManager em) {
//        try {
//            Relation r = (Relation) em.createNamedQuery("Relation.findByIdNodoPerla").setParameter("idNodoPerla", idNodo).getSingleResult();
//            return r.getIdSensoreGis();
//        } catch (NoResultException ex) {
//            return -1;
//        }
//    }
    /**
     * Restituisce la lista delle relazioni corrispondenti al nodo Perla
     * presenti nel database.
     *
     * @param idNodo la chiave del nodo
     * @param em l'entity manager
     * @return la lista delle relazioni
     * @throws NoRelationException se non esistono relazioni per il nodo passato
     */
    public static List<Relation> getRelations(String idNodo, EntityManager em) throws NoRelationException {
        List<Relation> l = em.createNamedQuery("Relation.findByIdNodoPerla").setParameter("idNodoPerla", idNodo).getResultList();
        if (l == null) {
            throw new NoRelationException();
        }
        return l;
    }

    /**
     * Restituisce la relazione corrispondente al sensore relativo alla chiave
     * passata come parametro.
     *
     * @param idGis la chiave del Gis
     * @param em l'entity manager
     * @return la relazione
     * @throws NoRelationException se non esiste relazione corrispondente al sensore Gis
     */
    public static Relation getRelation(String idGis, EntityManager em) throws NoRelationException {
        Relation r = em.find(Relation.class, Integer.parseInt(idGis));
        if (r == null) {
            throw new NoRelationException();
        }
        return r;
    }

    /**
     * Restituisce la lista di tutte le relazioni presenti nel database.
     *
     * @param em l'entity manager
     * @return la lista della relazioni
     */
    public static List<Relation> getAll(EntityManager em) {
        return em.createNamedQuery("Relation.findAll").getResultList();
    }
}
